﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Common
{
    public interface IWord
    {
        /// <summary>
        /// Returns the spelling of the word.
        /// </summary>
        /// <returns></returns>
        String getSpelling();
        /// <summary>
        /// Determines if this is a filler word
        /// </summary>
        /// <returns><code>true</code> if this word is a filler word, otherwise it
        ///         returns <code>false</code></returns>
        Boolean isFiller();
        
        /// <summary>
        /// Returns true if this word is an end of sentence word
        /// </summary>
        /// <returns>true if the word matches Dictionary.SENTENCE_END_SPELLING</returns>
        Boolean isSentenceEndWord();
        /// <summary>
        /// Returns true if this word is a start of sentence word
        /// </summary>
        /// <returns>true if the word matches Dictionary.SENTENCE_START_SPELLING</returns>
        Boolean isSentenceStartWord();
        /// <summary>
        /// Retrieves the pronunciations of this word
        /// </summary>
        /// <param name="wordClassification">the classification of the word (typically part
        ///        of speech classification) or null if all word classifications are
        ///        acceptable. The word classification must be one of the set
        ///        returned by
        ///        <code>Dictionary.getPossibleWordClassifications</code></param>
        /// <returns>the pronunciations of this word</returns>
        IPronunciation[] getPronunciations(IWordClassification wordClassification);

        /// <summary>
        /// Retrieves the pronunciations of this word
        /// </summary>
        /// <returns>the pronunciations of this word</returns>
        IPronunciation[] getPronunciations();
        /// <summary>
        /// Get the highest probability pronunciation for a word
        /// </summary>
        /// <returns>the highest probability pronunciation</returns>
        IPronunciation getMostLikelyPronunciation();

        int compareTo(IWord other);
    }
}
